﻿using System;
using System.Linq;
using SubsidiosBussinessLogic.Models;

namespace SubsidiosBussinessLogic.DataAccess.Interfaces
{
    public interface IFuncionarioRepository
    {
        /// <summary>
        /// Retorna una coleccion de funcionarios
        /// </summary>
        /// <returns></returns>
        IQueryable<Funcionario> GetFuncionarios();
        
        /// <summary>
        /// Crea una nueva instancia de funcionario
        /// </summary>
        /// <returns></returns>
        Funcionario CreateFuncionario();

        /// <summary>
        /// Prepara para borrar un funcionario
        /// </summary>
        /// <param name="funcionario"></param>
        void DeleteFuncionario(Funcionario funcionario);
        
        /// <summary>
        /// Retorna un funcionario que machea con la expresion
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        Funcionario FindSingle(Func<Funcionario, bool> func);

        /// <summary>
        /// Retorna todos los funcionarios que macheen con la expresion
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        IQueryable<Funcionario> FindWithMatch(Func<Funcionario, bool> func);

        /// <summary>
        /// Commitea los cambios en la base
        /// </summary>
        void SaveFuncionario();

    }
}